package com.agentframework.examples.playwright;

import com.agentframework.core.action.AbstractAction;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;

import java.util.List;

/**
 * @author wangjun
 **/
public class LoginWebsiteAction extends AbstractAction {

    String screenPrompt = """
            你已经打开网页地址，现在请直接调用工具 takeScreenshot 对当前页面进行截图。
             要求：
             - 忽略历史消息中，消息类型为role=assistant，并且content=Done消息
             - 不要描述页面内容
             - 不要调用其它工具
             - 直接调用 takeScreenshot 工具，参数 savePath 可任意，fullPage 设置为 true
            """;

    String getContentPrompt = """
            当前任务不再涉及视觉类操作，你已经完成网页截图任务，并且网页截图已经保存了下来，你现在正在网页中，需要进入下一步：
              现在请直接调用工具 getPageContent 获取当前网页的 HTML/CSS/JavaScript 结构代码。
              
              注意事项：
              - 忽略历史消息中，消息类型为role=assistant，并且content=Done消息
              - 仅直接调用 getPageContent 工具
              - 不要使用其他工具
              - 不要分析网页内容
            """;

    String formFillPrompt = """
            根据你看到的图片，以及结合分析的网页dom结构;
            image : %s
            dom: %s
            找到以下字段：
                - username_selector: 用户名输入框
                - password_selector: 密码输入框
                - submit_selector: 提交按钮
            带上json字段属性中的frameUrl，方便定位到iframe中的元素。
            然后把用户提供的账号输入到用户名输入框，密码输入到密码输入框, 然后点击提交按钮。
            
            注意：
             - 账号：wjun_java@163.com
             - 密码：password
             - 字段属性frameUrl很重要，一定要根据dom中的代码json结构找到正确的值
            """;

    protected LoginWebsiteAction(String actionName) {
        super(actionName);
    }

    @Override
    public AssistantMessage execute(List<Message> messages) {

        super.execute(messages);

        Prompt prompt = new PromptTemplate(screenPrompt).create();
        Message message = llm.call(prompt);
        String image = message.getText();

        prompt = new PromptTemplate(getContentPrompt).create();
        message = llm.call(prompt);
        String dom = message.getText();

        prompt = new PromptTemplate(String.format(formFillPrompt, image, dom)).create();
        message = llm.call(prompt);

        return (AssistantMessage) message;
    }

}
